package com.example.mq.mqServer.util;

import java.io.*;

/**
 * @BelongsProject: 0.mq
 * @BelongsPackage: com.example.mq.util
 * @Author : 游在海里的鱼
 * @CreateTime : 2023-12-13  15:49
 * @Version : 1.0
 * @Description : 序列化工具类，进行序列化或反序列化的类要实现接口Serializable
 */
public class SerializableUtils {

    /*------------------------------------普--通--方--法------------------------------------------------------------------
     * @Desc  : 序列化，Object-> 字节数组
     * @Param : [object]
     * @Return: byte[]
    **/
    public static byte[] toBytes(Object object) throws IOException {
        //1.ByteArrayOutputStream可以看作是一个长度可变的字节数组，OutputStream表示这是往字节数组里输入
        try (ByteArrayOutputStream array = new ByteArrayOutputStream()) {
        //2.用参数构建输入流
            try (ObjectOutputStream outputStream = new ObjectOutputStream(array)) {
        //3.输出到可变字节数组中
                outputStream.writeObject(object);
        //4.返回字节数组
                return array.toByteArray();
            }
        }
    }

    /*------------------------------------普--通--方--法------------------------------------------------------------------
     * @Desc  : 反序列化，字节数组->Object
     * @Param : [bytes]
     * @Return: java.lang.Object
    **/
    public static Object fromBytes(byte[] bytes) throws IOException, ClassNotFoundException {
        //1.ByteArrayInputStream可以看作是一个长度可变的字节数组，InputStream表示这是由字节数组往外输出
        try(ByteArrayInputStream array = new ByteArrayInputStream(bytes)){
        //2.用可变字节数组构建输入流
            try(ObjectInputStream inputStream = new ObjectInputStream(array)){
        //3.从可变数组输入到Object对象中并返回
                 return inputStream.readObject();
            }
        }
    }
}
